package br.com.sgmf.web.managedbean;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.sgmf.model.Funcao;
import br.com.sgmf.service.FuncaoService;

@Component
@ManagedBean
@RequestScoped
public class FuncaoBean {

	private static final String FUNCAO_SALVA_COM_SUCESSO = "Função salva com sucesso!";
	private static final String FUNCAO_EXCLUIDA_COM_SUCESSO = "Função excluída com sucesso!";
	private static final String ERRO_AO_SALVAR_FUNCAO = "Erro ao salvar Função";
	private static final String ERRO_AO_EXCLUIR_FUNCAO = "Erro ao excluir Função";

	private Funcao funcao;
	private List<Funcao> funcoes;

	@Autowired
	private FuncaoService funcaoService;

	@PostConstruct
	public void inicializar() {
		funcao = new Funcao();
		funcoes = funcaoService.findAll();
	}

	public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message;

		try {
			funcaoService.saveOrUpdate(funcao);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					FUNCAO_SALVA_COM_SUCESSO, null);
			inicializar();
		} catch (Exception e) {
			message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					ERRO_AO_SALVAR_FUNCAO, null);
			e.printStackTrace();
		}

		context.addMessage(null, message);
		return null;
	}

	public void novo() {

		funcao = new Funcao();
	}

	public String editar(Funcao funcao) {
		this.funcao = funcao;
		return null;
	}

	public String excluir(Funcao funcao) {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message;

		try {
			funcaoService.delete(funcao);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					FUNCAO_EXCLUIDA_COM_SUCESSO, null);
			inicializar();
		} catch (Exception e) {
			message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					ERRO_AO_EXCLUIR_FUNCAO, null);
			e.printStackTrace();
		}

		context.addMessage(null, message);
		return null;
	}

	public Funcao getFuncao() {
		return funcao;
	}

	public void setFuncao(Funcao funcao) {
		this.funcao = funcao;
	}

	public List<Funcao> getFuncoes() {
		return funcoes;
	}

	public void setFuncoes(List<Funcao> funcoes) {
		this.funcoes = funcoes;
	}

	public FuncaoService getFuncaoService() {
		return funcaoService;
	}

	public void setFuncaoService(FuncaoService funcaoService) {
		this.funcaoService = funcaoService;
	}

}
